import axios from 'axios'

import Vue from 'vue'
import {Loading} from "@/utils/Loading";


let baseURL = ""
if(process.env.NODE_ENV === "development") {
  baseURL = "/api"
}

const loading = Loading.getInstance()

// 创建实例，基本配置
const axiosInstance = axios.create({
  //baseURL: 'https://test.shendutv.com/renbao/',
  baseURL: baseURL,
  timeout: 50000
})

const successCode = new Set([0, "0", 603, 6001]) // 授权信息没有查到

// 拦截器（请求拦截）
axiosInstance.interceptors.request.use((config) => {
  // const token = window.getCookie('session')
  // config.data = JSON.stringify(config.data)
  console.log('================= url ==================')
  console.log(config.method + '  -  ' + config.url)
  console.log('================= 参数 ==================')
  if (config.method == "get") {
    //console.log(config.params)
  } else {
    console.log(config.data)
  }
  return config
})

// 拦截器（响应拦截）
axiosInstance.interceptors.response.use((res) => {
  console.log('================= responce ==================')
  console.log(res.data)
  // 将数据提前一个位置，便于获取
  let response = {
    data: res.data.data,
    code: res.data.code,
    msg: res.data.message,
    status: res.data.status,
    request: res.data.request,
    wxConfig: null
  }
  if(res.data.appId &&  res.data.signature && !res.data.data) {
    response.wxConfig = res.data
  }
  /*res = {
    res,
    ...response
  }*/
  return response
})

// ======================== 注册 axios 原生 GET POST请求 =============================
// 注册 axios GET POST请求(可以直接使用axios请求)
// Vue.prototype.$get = axiosInstance.get
// Vue.prototype.$post = axiosInstance.post

// ======================== 创建网络隔离框架 GET POST请求 =============================

// 注册自定义GET请求(不需要的传token, 自动生成token)
export const get = function (url, params = {}, isShowFullLoading) {
  //const authorization = UserModel.getSendToken()
  const authorization = ""

  return new Promise((resolve, reject) => {
    /*isShowFullLoading && Vue.prototype.$loading({
      duration: 500
    })*/
    loading.showLoading()

    axiosInstance.get(url, {
      // 请求参数
      params: params,
      // 请求头
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调
      loading.hideLoading()
      if (successCode.has(res.code) || res.wxConfig && res.wxConfig.appId && res.wxConfig.signature)  {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      console.log(err)
      // 状态不是200
      loading.hideLoading()
      reject(err.response ? err.response.data : "请求超时")
    })
  })
}

// 注册自定义POST请求(不需要的传token, 自动生成token)
export const post = function (url, params = {}, isShowFullLoading) {
  //const authorization = UserModel.getSendToken()
  const authorization = ""
  /*isShowFullLoading && Vue.prototype.$loading()*/
  loading.showLoading()
  return new Promise((resolve, reject) => {
    axiosInstance.post(url, params, {
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      loading.hideLoading()
      //Vue.prototype.$loadingClose()
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      loading.hideLoading()
      //Vue.prototype.$loadingClose()
      // 状态不是200
      reject(err.response ? err.response.data : "请求超时")
    })
  })
}

/*

// 注册自定义deleter请求(不需要的传token, 自动生成token)
export const deleter = function (url, params = {}) {
  const authorization = UserModel.getSendToken()
  return new Promise((resolve, reject) => {
    axiosInstance.delete(url, params, {
      // 请求头
      headers: {
        'Content-Type': 'application/json',
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      // 状态不是200
      reject(err.response ? err.response.data : ErrorMessage.timeOut)
    })
  })
}


// 注册自定义PATCH请求(不需要的传token, 自动生成token)
export const patch = function (url, params = {}) {
  const authorization = UserModel.getSendToken()
  return new Promise((resolve, reject) => {
    axiosInstance.patch(url, params, {
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      // 状态不是200
      reject(err.response ? err.response.data : ErrorMessage.timeOut)
    })
  })
}

// 注册自定义PUT请求(不需要的传token, 自动生成token)
/!**
 *
 * @param {*请求地址} url
 * @param {*} {id,params } 以对象方式传入
 *!/
export const put = function (url, {
  id,
  params = {}
}) {
  const authorization = UserModel.getSendToken()
  return new Promise((resolve, reject) => {
    let rurl = url
    if (id != undefined && id != '') {
      rurl = url + '/' + id
    }
    axiosInstance.put(rurl, params, {
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    })
      .catch((err) => {
        // 状态不是200
        reject(err.response ? err.response.data : ErrorMessage.timeOut)
      })
  })
}
*/

export default axiosInstance
